// 指定当前类所在的包名
package com.itzixi;

// 导入用于读取 .env 文件的 Dotenv 类
import io.github.cdimascio.dotenv.Dotenv;
// 导入 Spring Boot 应用启动的核心类
import org.springframework.boot.SpringApplication;
// 导入 Spring Boot 的核心注解，用于标记这是一个 Spring Boot 应用
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @ClassName Application
 * @Author 风间影月
 * @Version 1.0
 * @Description Spring Boot 应用的主启动类
 **/
// @SpringBootApplication 是一个组合注解，它包含了：
// @Configuration, @EnableAutoConfiguration, @ComponentScan
// 标记这个类是 Spring Boot 应用的入口点
@SpringBootApplication
public class Application {

    // Java 应用程序的主方法，程序启动的入口
    public static void main(String[] args) {

        // 使用 Dotenv 库加载项目根目录下的 .env 文件
        // configure() 开始配置 Dotenv
        // ignoreIfMissing() 如果 .env 文件不存在也不抛出异常
        // load() 执行加载操作
        Dotenv dotenv = Dotenv.configure().ignoreIfMissing().load();

        // 遍历 .env 文件中所有的键值对
        // dotenv.entries() 返回一个包含所有环境变量条目的集合
        // forEach(entry -> ...) 对集合中的每个条目执行操作
        // System.setProperty(key, value) 将每个键值对设置为 JVM 的系统属性
        // 这样 Spring Boot 就能通过 @Value 或 Environment 对象读取这些配置
        dotenv.entries().forEach(entry -> System.setProperty(entry.getKey(), entry.getValue()));

        // 启动 Spring Boot 应用
        // SpringApplication.run() 方法会启动 Spring 应用上下文
        // Application.class 指定了哪个类是主配置类
        // args 是命令行传入的参数
        SpringApplication.run(Application.class, args);
    }

}